Shader "Toon/ToonBasic Outline" 
{
	Properties 
	{
		_Color ("Main Color", Color) = (.5,.5,.5,1)
		_OutlineColor ("Outline Color", Color) = (0,0,0,1)
		_Outline ("Outline width", Range (.002, 0.04)) = .005
		_MainTex ("Base (RGB)", 2D) = "white" { }
		_ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { }
	}
	
	CGINCLUDE

		#include "UnityCG.cginc"

		uniform float _Outline;
		uniform float4 _OutlineColor;
	
		struct appdata 
		{
			float4 vertex : POSITION;
			float3 normal : NORMAL;
		};

		struct v2f 
		{
			float4 pos : SV_POSITION;
			UNITY_FOG_COORDS(0)
			fixed4 color : COLOR;
		};
	
		v2f vert(appdata v) 
		{
			v2f o;
			o.pos = UnityObjectToClipPos(v.vertex);

			float3 norm   = normalize(UnityObjectToClipPos (v.normal));
			float2 offset = TransformViewToProjection(norm.xy);

			#ifdef UNITY_Z_0_FAR_FROM_CLIPSPACE //to handle recent standard asset package on older version of unity (before 5.5)
				o.pos.xy += offset * UNITY_Z_0_FAR_FROM_CLIPSPACE(o.pos.z) * _Outline;
			#else
				o.pos.xy += offset * o.pos.z * _Outline;
			#endif
			o.color = _OutlineColor;
			UNITY_TRANSFER_FOG(o,o.pos);
			return o;
		}

	ENDCG

	SubShader 
	{
		Tags 
		{ 
			"RenderType" = "Opaque" 
		}

		UsePass "Toon/Basic/BASE"

		Pass
		{
			Name "OUTLINE"
			Tags { "LightMode" = "Always" }
			Cull Front
			ZWrite On
			ColorMask RGB
			Blend SrcAlpha OneMinusSrcAlpha

			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			//#pragma multi_compile_fog+

			fixed4 frag(v2f i) : SV_Target
			{
				UNITY_APPLY_FOG(i.fogCoord, i.color);
				return i.color;
			}
			ENDCG
		}
	}
	
	Fallback "Toon/ToonBasicShader"
}
